package com.lagou.client;

import com.lagou.SystemView.ManagerView;
import com.lagou.SystemView.StudentsView;
import com.lagou.model.User;
import com.lagou.model.UserMessage;

import java.io.IOException;
import java.net.Socket;

/**
 * 编程实现客户端的主界面绘制和相应功能的实现
 */
public class ClientView {

    /**
     * 合成复用原则
     */
    private ClientInitClose cic;

    /**
     * 通过构造方法实现成员变量的初始化
     * @param cic
     */
    public ClientView(ClientInitClose cic){
        this.cic = cic;
    }

    /**
     * 自定义成员方法实现客户端主界面的绘制
     */
    public void clientMainPage() throws IOException, ClassNotFoundException {

        while (true) {
            System.out.println("   \n\n          在线考试系统");
            System.out.println("--------------------------------");
            System.out.print("   [1] 学院系统");
            System.out.println("   [2] 管理员系统");
            System.out.println("   [0] 退出系统");
            System.out.println("--------------------------------");
            System.out.println("请选择要进行的业务编号");
            int choose = ClientScanner.getScanner().nextInt();
            switch (choose) {
                case 1:
                    clientStudentsLogin();
                    break;
                case 2:
                    clientManagerLogin();
                    break;
                case 0:
                    cic.getPs().println("exit");
                    System.out.println("正在退出系统");
                    return;
                default:
                    System.out.println("输入错误，请重新选择");
            }
        }
    }

    /**
     * 自定义成员方法实现客户端管理员登录的功能
     */
    private void clientManagerLogin() throws IOException, ClassNotFoundException {
        System.out.println("请输入管理员的账户信息：");
        String userName = ClientScanner.getScanner().next();
        System.out.println("请输入管理员的密码信息：");
        String password = ClientScanner.getScanner().next();
        UserMessage tum = new UserMessage("managerCheck", new User(userName, password));
        //将UserMessage对象通过对象输出流发送到服务器
        cic.getOos().writeObject(tum);
        //接收服务器的处理结果并给出提示
        tum = (UserMessage) cic.getOis().readObject();
        if("success".equals(tum.getType())){
            System.out.println("登录成功，欢迎使用");
            //声明ManagerView的引用指向该类的对象
            ManagerView mv = new ManagerView(cic);
            //调用ManagerView的成员方法进入管理员系统
            mv.ManagerMainPage();
        }else{
            System.out.println("用户名或密码错误");
        }
    }

    private void clientStudentsLogin() throws IOException, ClassNotFoundException {
        System.out.println("请输入学员的账户信息：");
        String userName = ClientScanner.getScanner().next();
        System.out.println("请输入学员的密码信息：");
        String password = ClientScanner.getScanner().next();
        UserMessage tum = new UserMessage("userCheck", new User(userName, password));
        //将UserMessage对象通过对象输出流发送到服务器
        cic.getOos().writeObject(tum);
        //接收服务器的处理结果并给出提示
        tum = (UserMessage) cic.getOis().readObject();
        if("success".equals(tum.getType())){
            System.out.println("登录成功，欢迎使用");
            //声明StudentsView的引用指向该类的对象
            StudentsView sv = new StudentsView(cic, tum.getUser());
            //调用StudentsView的成员方法进入学生系统
            sv.StudentsMainPage();
        }else{
            System.out.println("用户名或密码错误");
        }
    }
}

